﻿Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Imports Commander_Wars.Spieletools
Public Class ObjektInfoAnzeige
    Protected YStart As Integer = 130
    Const XStart As Integer = -44
    Shared Hintergrund(1) As Texture
    Shared VorderGrund(1) As Texture
    Shared Text As ObjektText
    Shared Rechteck As Rectangle
    Shared Symbole() As Texture = {}
    Dim forea As Texture
    Dim backa As Texture
    Dim Lufta As Texture

    Dim X As Integer = -1
    Dim Y As Integer = -1
    Shared Einheit As ObjektEinheit = New EinheitAmphibienpanzer(1, 0, 0, True)
    Shared EinheitAnimation As Objektverwalter.Kampfanimation
    Shared AktuelleEinheitAnimation As Objektverwalter.Kampfanimation
    Dim Startpunkt As Point
    ''' <summary>
    ''' Das X zum Malen der bewegten Luft bzw. See.
    ''' </summary>
    ''' <remarks></remarks>
    Dim BewegungsX As Integer = 0
    Dim BewegungsX2 As Integer = 0
    'Sachen fuer die Mitte
    Dim MittenRechteck As Rectangle
    Public Sub New()
        Text = New ObjektText(New String() {}, 2, 3, New Color() {Color.Black}, Schriftengine.Schriftarten.Arial, 8, FontStyle.Regular)
        If Not Hintergrund Is Nothing Then
            Dim B As Image = Image.FromFile(DataSettings.Resourcenpfad + "Objects\InfoAnzeigeEinheiten.png")
            Rechteck.Width = B.Width
            Rechteck.Height = B.Height
            Rechteck.Y = DataSettings.BildschirmHoehe - B.Height
            Rechteck.X = 0
            Hintergrund(0) = Grafikengine.LoadTexture(B)
            B = Image.FromFile(DataSettings.Resourcenpfad + "Objects\InfoAnzeigeMitteHinten.png")
            MittenRechteck.Width = B.Width
            MittenRechteck.Height = B.Height
            Hintergrund(1) = Grafikengine.LoadTexture(B)
            VorderGrund(0) = Grafikengine.LoadTexture(Image.FromFile(DataSettings.Resourcenpfad + "Objects\InfoAnzeigeEinheitenVorne.png"))
            VorderGrund(1) = Grafikengine.LoadTexture(Image.FromFile(DataSettings.Resourcenpfad + "Objects\InfoAnzeigeMitteVorne.png"))
        End If
        Startpunkt = New Point(14, DataSettings.BildschirmHoehe - 206)
        MittenRechteck.X = DataSettings.BildschirmBreite / 2 - MittenRechteck.Width / 2
        MittenRechteck.Y = DataSettings.BildschirmHoehe - MittenRechteck.Height
        'Mal sehen ob wir das noch brauchen.
        Array.Resize(Symbole, 5)
        Symbole(0) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Deckung.png")
        Symbole(1) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Haus.png")
        Symbole(2) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Herz.png")
        Symbole(3) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Treibstoff.png")
        Symbole(4) = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "Objects\Munition.png")


    End Sub

    Public Sub Malen()
        If DataSettings.InfoMenue Then 'Sollen wir das anzeigen...?
            If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Or Hauptmenue.AufzeichnungAbspielen Then


                Dim neuX As Integer = Hauptmenue.SpielfeldPunkt.X 'Wir holen uns die Koordinaten des Cursors
                Dim neuY As Integer = Hauptmenue.SpielfeldPunkt.Y


                If neuX <> X Or neuY <> Y Then
                    X = neuX
                    Y = neuY
                    LoadUnitTexture()
                ElseIf Objektverwalter.Spielfeld.OnMap(X, Y) Then
                    If Not Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht) Is Nothing Then
                        If Einheit.Equals(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                            LoadUnitTexture()
                        End If
                    End If
                End If
                If ObjektMaus.YKoordinate > DataSettings.BildschirmHoehe - Rechteck.Height - Hauptmenue.Feldbreite * 2 Then
                    Startpunkt.Y = 74
                    Rechteck.Y = 0
                Else
                    Startpunkt.Y = DataSettings.BildschirmHoehe - 206
                    Rechteck.Y = DataSettings.BildschirmHoehe - Rechteck.Height
                End If
                If ObjektMaus.YKoordinate > DataSettings.BildschirmHoehe - MittenRechteck.Height - Hauptmenue.Feldbreite * 2 Then
                    MittenRechteck.Y = 0
                Else
                    MittenRechteck.Y = DataSettings.BildschirmHoehe - MittenRechteck.Height
                End If
                DrawLinks()
                DrawMitte()
                If Not Objektverwalter.EinheitenMenue Is Nothing Then
                    Dim M As ObjektSpielMenue = Objektverwalter.Menue
                    If M.Spielmodus = ObjektSpielMenue.Spielmodi.AuswahlmenueEinheit Then
                        If Objektverwalter.EinheitenMenue.GetModus = ObjektEinheitenmenue.Modi.Einheitbauen Then
                            DrawRechts(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y)
                        End If
                    ElseIf M.Spielmodus = ObjektSpielMenue.Spielmodi.Tor1Bauen Then
                        Dim F As GebaeudeFabrik = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
                        DrawRechts(F.Rechteck.X - 1, F.Rechteck.Y + 2)
                    ElseIf M.Spielmodus = ObjektSpielMenue.Spielmodi.Tor2Bauen Then
                        Dim F As GebaeudeFabrik = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
                        DrawRechts(F.Rechteck.X, F.Rechteck.Y + 2)
                    ElseIf M.Spielmodus = ObjektSpielMenue.Spielmodi.Tor3Bauen Then
                        Dim F As GebaeudeFabrik = Objektverwalter.Spielfeld.Landschaften(Objektverwalter.Spielfeld.AktuelleEinheitPosition.X, Objektverwalter.Spielfeld.AktuelleEinheitPosition.Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude
                        DrawRechts(F.Rechteck.X + 1, F.Rechteck.Y + 2)
                    Else
                        DrawRechts()
                    End If
                Else
                    DrawRechts()
                End If


            End If
        End If
    End Sub



    Private Sub DrawLinks()
        Dim sngrotation As Single = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        'Zuerst malen wir die linke Infoleiste
        If Objektverwalter.Spielfeld.OnMap(X, Y) Then
            If Not Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Hidden Then
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfRotCenter = New Point()
                Grafikengine.ptfPosition = New Point(Rechteck.X, Rechteck.Y)
                Grafikengine.Sprite.Draw2D(Hintergrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                'Die Landschaft wird gemalt
                Dim S As ObjektSpieler = Einheit.GetSpieler()
                Dim SpriteVertauschung As Boolean = False
                If S.KOS(0).SpriteVertauschung = True And S.Team <> Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                    SpriteVertauschung = True
                End If
                Grafikengine.ptfPosition = Startpunkt
                If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Schiff.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Transport.ToString.ToUpper Then
                    Grafikengine.Sprite.Draw2D(Lufta, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(backa, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(forea, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                ElseIf Einheit.Sichtbar = False Then
                    Grafikengine.Sprite.Draw2D(Lufta, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(backa, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(forea, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                Else
                    'Jetzt malen wir die Sache bewegt.
                    BewegungsX += 3
                    If BewegungsX > 127 Then BewegungsX -= 127
                    With Grafikengine.recBild
                        .X = BewegungsX : .Width = 127 - BewegungsX
                        .Y = 0 : .Height = 192
                    End With
                    Grafikengine.Sprite.Draw2D(Lufta, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                        Grafikengine.Sprite.Draw2D(backa, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.Sprite.Draw2D(forea, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    End If
                    Grafikengine.ptfPosition.X += (127 - BewegungsX)
                    With Grafikengine.recBild
                        .X = 0 : .Width = BewegungsX
                        .Y = 0 : .Height = 192
                    End With
                    Grafikengine.Sprite.Draw2D(Lufta, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                        Grafikengine.Sprite.Draw2D(backa, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.Sprite.Draw2D(forea, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    End If
                    'Zuruecksetzen fuers weitere malen.
                    Grafikengine.recBild = Nothing
                    Grafikengine.szfScale = Nothing
                    Grafikengine.ptfRotCenter = New Point()
                    Grafikengine.ptfPosition = Startpunkt
                End If
                'Name der Landschaft auf jeden Fall
                '0=Name der Landschaft 1= Besetzungszahl
                Dim InfoText As String() = {" ", " ", " ", " ", " ", " ", " ", " "}
                '            'Das Gebaeude wird gemalt
                Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude

                'Die Einheit wird gemalt

                If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                    If Einheit.Sichtbar = True Then
                        If SpriteVertauschung Then
                            DrawUnit(Grafikengine.ptfPosition, False, Objektverwalter.AlleEinheiten(ObjektEinheit.INFID).GetKampfAnimation(Einheit.GetSpieler.Armee), Einheit)
                        Else
                            DrawUnit(Grafikengine.ptfPosition, False, EinheitAnimation, Einheit)
                        End If
                    End If
                End If

                Dim Max As Integer = Einheit.GetSpieler.GetDeffensivSterne(Nothing, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
                Dim StartX As Integer = 127 - Max * 8 - 5
                Grafikengine.ptfPosition = Startpunkt
                Grafikengine.ptfPosition.X += StartX
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = Nothing
                For I = 0 To Max - 1
                    Grafikengine.Sprite.Draw2D(ObjektKOInformation.BildTexturen(5), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.ptfPosition.X += 8
                    If I = 4 Then
                        Grafikengine.ptfPosition = Startpunkt
                        Grafikengine.ptfPosition.X += +StartX + 4
                        Grafikengine.ptfPosition.Y += 10
                    End If
                Next
                'Gebaeude oder Landschaft auslesen.
                InfoText(0) = Sprachconverter.Translate(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Landschaftsname)
                If IsNothing(G) = False Then
                    InfoText(0) = Sprachconverter.Translate(G.Gebaeudename)
                    If G.Besetzung > 0 Then
                        InfoText(1) = Sprachconverter.Translate("Besetzungszahl") + ": " + G.Besetzung.ToString
                    End If
                ElseIf Not Einheit Is Nothing Then
                    If Einheit.HasMaterial Then
                        If TypeOf Einheit Is EinheitTTP Then
                            Dim TTP As EinheitTTP = Einheit
                            If TTP.GetBaufortschritt > 0 Then
                                InfoText(1) = Sprachconverter.Translate("Aufbau") + ": " + TTP.GetBaufortschritt.ToString
                            End If
                        End If
                    End If
                    'If G.KP > 0 Then
                    '    Array.Resize(T, T.Length + 1)
                    '    T(T.Length - 1) = G.KP
                    'End If
                End If
                'Einheit auslesen und Balken malen.
                If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                    If Einheit.Sichtbar = True Then

                        Grafikengine.ptfPosition = Startpunkt
                        '0=Normal 1=Exakt 2=Unbekannt
                        Dim LebensbalkenMalen As Integer = 0
                        If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).KOS(0).Verstecker = True And Einheit.GetSpieler.KOS(0).KOBoostApply(Einheit.X, Einheit.Y) And Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team <> Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team Then
                            LebensbalkenMalen = 2
                        ElseIf Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).GenauesLebenAnzeigen = True Then
                            LebensbalkenMalen = 1
                        Else
                            LebensbalkenMalen = 0
                        End If
                        If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team <> Objektverwalter.Spielfeld.AktuellerSpieler.Team Then
                            If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.FeindlicheTPVersteckt = True Then
                                'Aufgrund von Gaben oder so koennen wir keine TP von Feinden sehen
                                LebensbalkenMalen = 2
                            End If
                        Else
                            If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.EigeneTPVersteckt = True Then
                                'Aufgrund von Gaben oder so koennen wir keine TP von eigenen Truppen sehen
                                LebensbalkenMalen = 2
                            End If
                        End If

                        Dim ATKLeben As Single = Einheit.Leben
                        Dim ProzLeben As Single = (Einheit.Leben) / (100)
                        If LebensbalkenMalen < 2 Then
                            'Wir malen den Lebensbalken
                            ATKLeben *= ProzLeben
                            Grafikengine.fillRect(Startpunkt.X, Startpunkt.Y - 20, (127 * ProzLeben), 20, KampfAnimation.CalculateLiveBarColor(ATKLeben)) 'draws the appropriate percent of the life bar
                        Else
                            ProzLeben = -1
                        End If
                        'wir malen den Treibstoff
                        Dim ProzTreib As Single = (Einheit.Treibstoff) / (Einheit.SpritMax)
                        Grafikengine.fillRect(Startpunkt.X, Startpunkt.Y - 40, (127 * ProzTreib), 20, CalculateTreibBarColor(ProzTreib * 100)) 'draws the appropriate percent of the life bar
                        'Wir malen die Munition
                        Dim ProzMuni As Single = (Einheit.Munition) / (Einheit.MunitionMax)
                        If Not Einheit.Waffe2 = "Keine" Or Einheit.HasMaterial Then
                            Grafikengine.fillRect(Startpunkt.X, Startpunkt.Y - 60, (127 * ProzMuni), 20, Color.Brown) 'draws the appropriate percent of the life bar
                        End If
                        If SpriteVertauschung Then
                            InfoText(2) = Sprachconverter.Translate("Infanterie")
                            InfoText(3) = Sprachconverter.Translate("Waffe") + " 1: " + Sprachconverter.Translate("InfanterieMG")
                            InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate("Keine")
                            InfoText(5) = Sprachconverter.Translate("Bewegungsart") + ": " + Sprachconverter.Translate(MovementSorts.Fuss.ToString)
                            InfoText(6) = Sprachconverter.Translate("Bewegungspunkte") + ": " + 3.ToString
                            InfoText(7) = Sprachconverter.Translate("Sicht") + ": 2"
                            If Objektverwalter.Spielfeld.Regeln.LevelModus = True Then
                                Array.Resize(InfoText, 9)
                                InfoText(8) = Sprachconverter.Translate("Rang") + ": " + Sprachconverter.Translate(Einheit.EinheitenStufe.ToString)
                            End If
                        Else
                            InfoText(2) = Sprachconverter.Translate(Einheit.Einheitenname)
                            If Einheit.Waffe1 <> "Keine" Then
                                InfoText(3) = Sprachconverter.Translate("Waffe") + " 1: " + Sprachconverter.Translate(Einheit.Waffe1)
                            End If
                            If Einheit.Waffe2 <> "Keine" Then
                                InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate(Einheit.Waffe2)
                            ElseIf Einheit.HasMaterial Then
                                InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate("Material")
                            End If
                            InfoText(5) = Sprachconverter.Translate("Bewegungsart") + ": " + Sprachconverter.Translate(Einheit.Bewegungsart)
                            InfoText(6) = Sprachconverter.Translate("Bewegungspunkte") + ": " + Einheit.GetMovementRange.ToString
                            InfoText(7) = Sprachconverter.Translate("Sicht") + ": " + Einheit.GetSicht().ToString
                            If Objektverwalter.Spielfeld.Regeln.LevelModus = True Then
                                Array.Resize(InfoText, 9)
                                InfoText(8) = Sprachconverter.Translate("Rang") + ": " + Sprachconverter.Translate(Einheit.EinheitenStufe.ToString)
                            End If
                            'Jetzt noch die Fracht anzeigen
                            If Einheit.Ladung.Length > 0 Then
                                If Objektverwalter.Spielfeld.Regeln.Nebel > 0 Then
                                    If IsNothing(Einheit.Ladung(0)) = False Then
                                        AddLadung(InfoText, False, Einheit)
                                    ElseIf Not Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                                        AddLadung(InfoText, True, Einheit)
                                    End If
                                ElseIf Hauptmenue.Formmodus = Hauptmenue.Formmodi.Spiel Then
                                    If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).KOS(0).Verstecker = True And Einheit.GetSpieler.KOS(0).KOBoostApply(X, Y) Then
                                        If Not Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                                            AddLadung(InfoText, True, Einheit)
                                        ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                                            AddLadung(InfoText, False, Einheit)
                                        End If
                                    ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                                        AddLadung(InfoText, False, Einheit)
                                    End If
                                ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                                    AddLadung(InfoText, False, Einheit)
                                End If
                            End If
                        End If
                        'Jetzt Malen wir noch die Zahlen fuer Muni Treibstoff und Leben
                        If IsNothing(Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)) = False Then
                            If Einheit.Sichtbar = True Then
                                'das Leben
                                Dim Text As String = Sprachconverter.Translate("Leben") + " "
                                Select Case LebensbalkenMalen
                                    Case 1 'Wir malen exakt
                                        Text += CInt(Einheit.Leben).ToString + "/100"
                                    Case 2 'Wir malen ein "-/-"
                                        Text += "-/-"
                                    Case Else 'wir malen die KP
                                        Text += Einheit.getKP.ToString + "/10"
                                End Select
                                ObjektAlphabet.DrawString(Text, 1, New Point(Startpunkt.X + 127 + 8, Startpunkt.Y - 19), 1)
                                'Jetzt Treibstoff
                                Text = Sprachconverter.Translate("Treibstoff") + " "
                                If Einheit.Treibstoff < 0 Then
                                    Text += "-/-"
                                Else
                                    Text += Einheit.Treibstoff.ToString + "/" + Einheit.SpritMax.ToString
                                End If
                                ObjektAlphabet.DrawString(Text, 1, New Point(Startpunkt.X + 127 + 8, Startpunkt.Y - 39), 1)
                                'Munition
                                Text = Sprachconverter.Translate("Munition") + " "
                                If Einheit.MunitionMax < 0 Then
                                    Text = ""
                                Else
                                    Text += Einheit.Munition.ToString + "/" + Einheit.MunitionMax.ToString
                                End If
                                ObjektAlphabet.DrawString(Text, 1, New Point(Startpunkt.X + 127 + 8, Startpunkt.Y - 59), 1)
                            End If
                        End If
                    End If
                Else
                    Dim L As ObjektLandschaft = Objektverwalter.Spielfeld.Landschaften(Hauptmenue.SpielfeldPunkt.X, Hauptmenue.SpielfeldPunkt.Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                    'Falls die Landschaft Leben hat Malen wir das jetzt
                    If L.GetLive > 0 Then
                        Dim ProzLeben As Single = (L.GetLive) / (L.GetMaxLeben)
                        Grafikengine.fillRect(Startpunkt.X, Startpunkt.Y - 20, (127 * ProzLeben), 20, KampfAnimation.CalculateLiveBarColor(ProzLeben * 100)) 'draws the appropriate percent of the life bar
                        Dim Text As String = "Leben " + L.GetLive.ToString + "/" + L.GetMaxLeben.ToString
                        ObjektAlphabet.DrawString(Text, 1, New Point(Startpunkt.X + 127 + 8, Startpunkt.Y - 19), 1)
                    End If
                End If



                'Infos malen
                Text.neuerText(InfoText, Startpunkt.X + 127 + 8, Startpunkt.Y + 10, Nothing)
                Text.Malen(New Point)

                'wir malen den Vordergrund
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfPosition = New Point(Rechteck.X, Rechteck.Y)
                Grafikengine.Sprite.Draw2D(VorderGrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
            End If
        End If
    End Sub
    Private Sub DrawMitte()
        Dim Units As Integer = 0
        Dim Buildings As Integer = 0
        Dim LSchlacht As Integer = ObjektSpielfeld.Luftschlacht
        If Not Objektverwalter.Spielfeld.Regeln.Luftschlacht Then LSchlacht = ObjektSpielfeld.Bodenschlacht
        For Z = 0 To LSchlacht
            For X1 = 0 To Objektverwalter.Spielfeld.Breite - 1
                For Y1 = 0 To Objektverwalter.Spielfeld.Hoehe - 1
                    If Objektverwalter.Spielfeld.Einheiten(X1, Y1, Z) IsNot Nothing Then
                        If Objektverwalter.Spielfeld.Einheiten(X1, Y1, Z).Spieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler Then
                            Units += 1
                        End If
                    End If
                    If Objektverwalter.Spielfeld.Landschaften(X1, Y1, Z).Gebaeude IsNot Nothing Then
                        If Objektverwalter.Spielfeld.Landschaften(X1, Y1, Z).Gebaeude.Spieler = Objektverwalter.Spielfeld.AktuellerSpieler.Spieler Then
                            Buildings += 1
                        End If
                    End If
                Next
            Next
        Next
        If Objektverwalter.Spielfeld.Laufen IsNot Nothing Then
            Units += 1
        End If
        Dim sngrotation As Single = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Grafikengine.recBild = Nothing
        Grafikengine.szfScale = Nothing
        Grafikengine.ptfRotCenter = New Point()
        Grafikengine.ptfPosition = New Point(MittenRechteck.X, MittenRechteck.Y)
        'mal ueberlegen was alles in der Mitte angezeigt wird.
        'Hintergrund
        Grafikengine.Sprite.Draw2D(Hintergrund(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
        'KO Bilder
        Objektverwalter.GetKO(Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).Bild).KOGesichtsausdruckMalen _
        (0, MittenRechteck.X + 8, MittenRechteck.Y + 9)
        If Not Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1) Is Nothing Then
            Objektverwalter.GetKO(Objektverwalter.Spielfeld.AktuellerSpieler.KOS(1).Bild).KOGesichtsausdruckMalen _
            (0, MittenRechteck.X + 70, MittenRechteck.Y + 9)
        End If
        'Wettersymbol
        Grafikengine.recBild = Nothing
        Grafikengine.szfScale = Nothing
        Grafikengine.ptfRotCenter = New Point()
        Grafikengine.ptfPosition = New Point(MittenRechteck.X + 123, MittenRechteck.Y + 9)
        Grafikengine.Sprite.Draw2D(TexturenHalter.GetWetterSymbol(), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)

        'Text Anzeigen
        Dim AnzeigeText As String() = {Sprachconverter.Translate("Einkommen") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Einkommen.ToString}
        Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 100, New Color() {Color.Black})
        Text.Malen(New Point)
        'Spieler
        AnzeigeText = New String() {Sprachconverter.Translate("Spieler") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Spieler.ToString}
        Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 70, New Color() {Color.Black})
        Text.Malen(New Point)
        'Team
        AnzeigeText = New String() {Sprachconverter.Translate("Team") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Team.ToString}
        Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 85, New Color() {Color.Black})
        Text.Malen(New Point)
        'Fonds
        If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.KeineFondsInfos = True Then
            AnzeigeText = New String() {Sprachconverter.Translate("Fonds") + " : ?"}
            Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 115, New Color() {Color.Black})
            Text.Malen(New Point)
        Else
            If Objektverwalter.Spielfeld.Regeln.Nebel > 0 Then
                If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                    AnzeigeText = New String() {Sprachconverter.Translate("Fonds") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Fonds.ToString}
                    Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 115, New Color() {Color.Black})
                    Text.Malen(New Point)
                ElseIf Objektverwalter.Spielfeld.AktuellerSpieler.Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                    AnzeigeText = New String() {Sprachconverter.Translate("Fonds") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Fonds.ToString}
                    Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 115, New Color() {Color.Black})
                    Text.Malen(New Point)
                Else
                    AnzeigeText = New String() {Sprachconverter.Translate("Fonds") + " : ?"}
                    Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 115, New Color() {Color.Black})
                    Text.Malen(New Point)
                End If
            Else
                AnzeigeText = New String() {Sprachconverter.Translate("Fonds") + " : " + Objektverwalter.Spielfeld.AktuellerSpieler.Fonds.ToString}
                Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 115, New Color() {Color.Black})
                Text.Malen(New Point)
            End If
        End If

        'Gebaeude
        If Objektverwalter.Spielfeld.Regeln.Nebel > Nebelarten.Aus Then
            If Objektverwalter.Spielfeld.AktuellerSpieler.KIStufe = ObjektSpieler.KIStufen.Mensch Then
                AnzeigeText = New String() {Sprachconverter.Translate("Gebaeude") + " : " + Buildings.ToString}
                Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 130, New Color() {Color.Black})
                Text.Malen(New Point)
            ElseIf Objektverwalter.Spielfeld.AktuellerSpieler.Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                AnzeigeText = New String() {Sprachconverter.Translate("Gebaeude") + " : " + Buildings.ToString}
                Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 130, New Color() {Color.Black})
                Text.Malen(New Point)
            Else
                AnzeigeText = New String() {Sprachconverter.Translate("Gebaeude") + " : ?"}
                Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 130, New Color() {Color.Black})
                Text.Malen(New Point)
            End If
        Else
            AnzeigeText = New String() {Sprachconverter.Translate("Gebaeude") + " : " + Buildings.ToString}
            Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 130, New Color() {Color.Black})
            Text.Malen(New Point)
        End If
        'Einheiten
        AnzeigeText = New String() {Sprachconverter.Translate("Einheiten") + " : " + Units.ToString}
        Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 145, New Color() {Color.Black})
        Text.Malen(New Point)

        'evtl. Fonds
        'EinheitenZahl
        'GebaeudeZahl. 
        'usw. ...
        AnzeigeText = New String() {"X=" + Hauptmenue.SpielfeldPunkt.X.ToString + " , Y=" + Hauptmenue.SpielfeldPunkt.Y.ToString}
        Text.neuerText(AnzeigeText, MittenRechteck.X + 10, MittenRechteck.Y + 175, New Color() {Color.Black})
        Text.Malen(New Point)

        'Vordergrund
        Grafikengine.ptfPosition = New Point(MittenRechteck.X, MittenRechteck.Y)
        Grafikengine.Sprite.Draw2D(VorderGrund(1), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
    End Sub
    Private Sub DrawRechts()
        Dim sngrotation As Single = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        'Jetzt noch die aktuelle Einheit. Rechts noch nicht sicher was

        Dim E As ObjektEinheit = Objektverwalter.Spielfeld.AktuelleEinheit


        If Not E Is Nothing Then
            Dim EVerbrauch As Integer = 0
            If Objektverwalter.Spielfeld.AktuelleEinheitPfeil IsNot Nothing Then
                EVerbrauch = Objektverwalter.Spielfeld.AktuelleEinheitPfeil.TreibstoffVerbrauch
            End If
            If E.X <> X Or E.Y <> Y Then
                Dim EinheitX As Integer = E.X
                Dim EinheitY As Integer = E.Y
                Dim SpriteVertauschung As Boolean = False
                Dim S As ObjektSpieler = E.GetSpieler
                If S.KOS(0).SpriteVertauschung = True And S.Team <> Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                    SpriteVertauschung = True
                End If
                'Wir malen die aktuelle Einheit und ihre Daten
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = New Size(-Rechteck.Width, Rechteck.Height)
                Grafikengine.ptfRotCenter = New Point()
                Grafikengine.ptfPosition = New Point(DataSettings.BildschirmBreite, Rechteck.Y)
                'Der Hintergrund
                Grafikengine.Sprite.Draw2D(Hintergrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                'Die Landschaft wird gemalt

                Grafikengine.ptfPosition = Startpunkt
                Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
                Grafikengine.szfScale = New Size(-127, 192)
                If Not E.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper And Not E.Bewegungsart.ToUpper = MovementSorts.Schiff.ToString.ToUpper And Not E.Bewegungsart.ToUpper = MovementSorts.Transport.ToString.ToUpper Then
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.getSky(0, E.GetTerrain), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.getAltBack(0, E.GetTerrain), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.getFore(0, E.GetTerrain, True), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                Else
                    'Jetzt malen wir die Sache bewegt.
                    BewegungsX2 += 3
                    If BewegungsX2 > 127 Then BewegungsX2 -= 127
                    With Grafikengine.recBild
                        .X = BewegungsX2 : .Width = 127 - BewegungsX2
                        .Y = 0 : .Height = 192
                    End With
                    Grafikengine.szfScale = New Size(-Grafikengine.recBild.Width, 192)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAirSky(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    If Not E.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                        Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAltBackSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.Sprite.Draw2D(KampfGrafiken.GetForeSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    End If
                    Grafikengine.ptfPosition.X -= (127 - BewegungsX2)
                    With Grafikengine.recBild
                        .X = 0 : .Width = BewegungsX2
                        .Y = 0 : .Height = 192
                    End With
                    Grafikengine.szfScale = New Size(-Grafikengine.recBild.Width, 192)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAirSky(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    If Not E.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                        Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAltBackSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                        Grafikengine.Sprite.Draw2D(KampfGrafiken.GetForeSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    End If
                    'Zuruecksetzen fuers weitere malen.
                    Grafikengine.recBild = Nothing
                    Grafikengine.szfScale = Nothing
                    Grafikengine.ptfRotCenter = New Point()
                    Grafikengine.ptfPosition = Startpunkt
                End If
                'weiter geht's
                Dim InfoText As String() = {Sprachconverter.Translate("Aktuelle Einheit"), " ", " ", " ", " ", " ", " ", " ", " "}
                '            'Das Gebaeude wird gemalt
                Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(EinheitX, EinheitY, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude

                Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X - 127 - 127 - 4
                'Die Einheit wird gemalt
                If SpriteVertauschung Then
                    DrawUnit(Grafikengine.ptfPosition, True, Objektverwalter.AlleEinheiten(ObjektEinheit.INFID).GetKampfAnimation(E.GetSpieler.Armee), E)
                Else
                    DrawUnit(Grafikengine.ptfPosition, True, E.GetKampfanimation, E)
                End If
                'wir malen die Deckung
                Dim Max As Integer = E.GetSpieler.GetDeffensivSterne(Nothing, Objektverwalter.Spielfeld.Landschaften(EinheitX, EinheitY, Objektverwalter.Spielfeld.MomentaneSchlacht))
                Dim StartX As Integer = 5
                Grafikengine.ptfPosition.Y = Startpunkt.Y
                Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
                Grafikengine.ptfPosition.X += (StartX - 127)
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = Nothing
                For I = 0 To Max - 1
                    Grafikengine.Sprite.Draw2D(ObjektKOInformation.BildTexturen(5), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.ptfPosition.X += 8
                    If I = 4 Then
                        Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
                        Grafikengine.ptfPosition.X += +StartX + 4
                        Grafikengine.ptfPosition.Y += 10
                    End If
                Next
                'Gebaeude oder Landschaft auslesen.
                InfoText(1) = Sprachconverter.Translate(Objektverwalter.Spielfeld.Landschaften(EinheitX, EinheitY, Objektverwalter.Spielfeld.MomentaneSchlacht).Landschaftsname)
                If IsNothing(G) = False Then
                    InfoText(1) = Sprachconverter.Translate(G.Gebaeudename)
                    If G.Besetzung > 0 Then
                        InfoText(2) = Sprachconverter.Translate("Besetzungszahl") + ": " + G.Besetzung.ToString
                    End If
                ElseIf Not E Is Nothing Then
                    If E.HasMaterial Then
                        If TypeOf E Is EinheitTTP Then
                            Dim TTP As EinheitTTP = E
                            If TTP.GetBaufortschritt > 0 Then
                                InfoText(1) = Sprachconverter.Translate("Aufbau") + ": " + TTP.GetBaufortschritt.ToString
                            End If
                        End If
                    End If
                End If
                'die Einheiten malen
                Grafikengine.ptfPosition.Y = Startpunkt.Y
                Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X - 127
                '0=Normal 1=Exakt 2=Unbekannt
                Dim LebensbalkenMalen As Integer = 0
                If Objektverwalter.Spielfeld.Spieler(E.Spieler).KOS(0).Verstecker = True And E.GetSpieler.KOS(0).KOBoostApply(X, Y) And Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team <> Objektverwalter.Spielfeld.Spieler(E.Spieler).Team Then
                    LebensbalkenMalen = 2
                ElseIf Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).GenauesLebenAnzeigen = True Then
                    LebensbalkenMalen = 1
                Else
                    LebensbalkenMalen = 0
                End If
                If Objektverwalter.Spielfeld.Spieler(E.Spieler).Team <> Objektverwalter.Spielfeld.AktuellerSpieler.Team Then
                    If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.FeindlicheTPVersteckt = True Then
                        'Aufgrund von Gaben oder so koennen wir keine TP von Feinden sehen
                        LebensbalkenMalen = 2
                    End If
                Else
                    If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.EigeneTPVersteckt = True Then
                        'Aufgrund von Gaben oder so koennen wir keine TP von eigenen Truppen sehen
                        LebensbalkenMalen = 2
                    End If
                End If

                Dim ATKLeben As Single = E.Leben
                If LebensbalkenMalen < 2 Then
                    'Wir malen den Lebensbalken
                    Dim ProzLeben As Single = (E.Leben) / (100)
                    ATKLeben *= ProzLeben
                    Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzLeben), Startpunkt.Y - 20, (127 * ProzLeben), 20, KampfAnimation.CalculateLiveBarColor(ATKLeben)) 'draws the appropriate percent of the life bar
                End If
                'wir malen den Treibstoff
                Dim ProzTreib As Single = 0
                If E.Treibstoff >= 0 Then
                    ProzTreib = (E.Treibstoff - EVerbrauch * E.GetTreibstoffMultiplikator) / (E.SpritMax)
                Else
                    ProzTreib = 1
                End If
                Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzTreib), Startpunkt.Y - 40, (127 * ProzTreib), 20, CalculateTreibBarColor(ProzTreib * 100)) 'draws the appropriate percent of the life bar
                'Wir malen die Munition
                If Not E.Waffe2 = "Keine" Or E.HasMaterial Then
                    Dim ProzMuni As Single = (E.Munition) / (E.MunitionMax)
                    Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzMuni), Startpunkt.Y - 60, (127 * ProzMuni), 20, Color.Brown) 'draws the appropriate percent of the life bar
                End If


                Dim Text As String = Sprachconverter.Translate("Leben") + " "
                Select Case LebensbalkenMalen
                    Case 1 'Wir malen exakt
                        Text += CInt(E.Leben).ToString + "/100"
                    Case 2 'Wir malen ein "-/-"
                        Text += "-/-"
                    Case Else 'wir malen die KP
                        Text += E.getKP.ToString + "/10"
                End Select
                Dim Breite As Integer = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
                ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 19), 1)
                'Jetzt Treibstoff
                Text = Sprachconverter.Translate("Treibstoff") + " "
                If E.Treibstoff < 0 Then
                    Text += "-/-"
                Else
                    Text += (E.Treibstoff - EVerbrauch * E.GetTreibstoffMultiplikator).ToString + "/" + E.SpritMax.ToString
                End If
                Breite = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
                ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 39), 1)
                'Munition
                Text = Sprachconverter.Translate("Munition") + " "
                If E.MunitionMax < 0 Then
                    Text = ""
                Else
                    Text += E.Munition.ToString + "/" + E.MunitionMax.ToString
                End If
                Breite = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
                ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 59), 1)

                If SpriteVertauschung Then
                    InfoText(2) = Sprachconverter.Translate("Infanterie")
                    InfoText(3) = Sprachconverter.Translate("Waffe") + " 1: " + Sprachconverter.Translate("InfanterieMG")
                    InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate("Keine")
                    InfoText(5) = Sprachconverter.Translate("Bewegungsart") + ": " + Sprachconverter.Translate(MovementSorts.Fuss.ToString)
                    InfoText(6) = Sprachconverter.Translate("Bewegungspunkte") + ": " + 3.ToString
                    InfoText(7) = Sprachconverter.Translate("Sicht") + ": 2"
                    If Objektverwalter.Spielfeld.Regeln.LevelModus = True Then
                        Array.Resize(InfoText, 9)
                        InfoText(8) = Sprachconverter.Translate("Rang") + ": " + Sprachconverter.Translate(Einheit.EinheitenStufe.ToString)
                    End If
                Else
                    InfoText(3) = Sprachconverter.Translate(E.Einheitenname)
                    If E.Waffe1 <> "Keine" Then
                        InfoText(4) = Sprachconverter.Translate("Waffe") + " 1: " + Sprachconverter.Translate(E.Waffe1)
                    End If
                    If E.Waffe2 <> "Keine" Then
                        InfoText(5) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate(E.Waffe2)
                    ElseIf E.HasMaterial Then
                        InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate("Material")
                    End If
                    InfoText(6) = Sprachconverter.Translate("Bewegungsart") + ": " + Sprachconverter.Translate(E.Bewegungsart)
                    Dim BewPunkte As Integer = E.GetMovementRange - EVerbrauch
                    InfoText(7) = Sprachconverter.Translate("Bewegungspunkte") + ": " + BewPunkte.ToString
                    InfoText(8) = Sprachconverter.Translate("Sicht") + ": " + E.GetSicht().ToString
                    If Objektverwalter.Spielfeld.Regeln.LevelModus = True Then
                        Array.Resize(InfoText, 10)
                        InfoText(9) = Sprachconverter.Translate("Rang") + ": " + Sprachconverter.Translate(Einheit.EinheitenStufe.ToString)
                    End If
                    'Jetzt noch die Fracht anzeigen
                    If E.Ladung.Length > 0 Then
                        If Objektverwalter.Spielfeld.Regeln.Nebel > 0 Then
                            If IsNothing(E.Ladung(0)) = False Then
                                AddLadung(InfoText, False, E)
                            ElseIf Not Objektverwalter.Spielfeld.Spieler(E.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                                AddLadung(InfoText, True, E)
                            End If
                        ElseIf Hauptmenue.Formmodus = Hauptmenue.Formmodi.Spiel Then
                            If Objektverwalter.Spielfeld.Spieler(E.Spieler).KOS(0).Verstecker = True And E.GetSpieler.KOS(0).KOBoostApply(X, Y) Then
                                If Not Objektverwalter.Spielfeld.Spieler(E.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                                    AddLadung(InfoText, True, E)
                                ElseIf IsNothing(E.Ladung(0)) = False Then
                                    AddLadung(InfoText, False, E)
                                End If
                            ElseIf IsNothing(E.Ladung(0)) = False Then
                                AddLadung(InfoText, False, E)
                            End If
                        ElseIf IsNothing(E.Ladung(0)) = False Then
                            AddLadung(InfoText, False, E)
                        End If
                    End If
                End If
                'Infos malen
                ObjektInfoAnzeige.Text.neuerText(InfoText, DataSettings.BildschirmBreite - Startpunkt.X - 127 - 127 - 15, Startpunkt.Y + 10, Nothing)
                ObjektInfoAnzeige.Text.Malen(New Point)


                'wir malen den Vordergrund
                Grafikengine.recBild = Nothing
                Grafikengine.ptfPosition = New Point(DataSettings.BildschirmBreite, Rechteck.Y)
                Grafikengine.szfScale = New Size(-Rechteck.Width, Rechteck.Height)
                Grafikengine.Sprite.Draw2D(VorderGrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
            End If
        End If
    End Sub
    ''' <summary>
    ''' Das Feld auf welches wir eine Einheit setzen wollen
    ''' </summary>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <remarks></remarks>
    Private Sub DrawRechts(ByVal X As Integer, ByVal Y As Integer)
        Dim sngrotation As Single = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Dim Daten() As String = Objektverwalter.EinheitenMenue.Tags(Objektverwalter.EinheitenMenue.GetCursorPosition).Split(" ")
        Dim Einheitenname As String = Daten(0)
        If Daten.Length > 2 Then
            For I = 1 To Daten.Length - 2
                If Not Daten(I) = "" Then
                    Einheitenname += " " + Daten(I)
                End If
            Next
        End If
        Dim EinheitID As String = ObjektLadeklasse.GetIDFromName(Einheitenname)

        Dim Einheit As ObjektEinheit = ObjektLadeklasse.NewEinheit(EinheitID, Objektverwalter.Spielfeld.AktuellerSpieler.Spieler, X, Y)
        If Not Einheit Is Nothing Then
            Einheit.SetKP(Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.TPBauEinheiten)
            'Wir malen die aktuelle Einheit und ihre Daten
            Grafikengine.recBild = Nothing
            Grafikengine.szfScale = New Size(-Rechteck.Width, Rechteck.Height)
            Grafikengine.ptfRotCenter = New Point()
            Grafikengine.ptfPosition = New Point(DataSettings.BildschirmBreite, Rechteck.Y)
            'Der Hintergrund
            Grafikengine.Sprite.Draw2D(Hintergrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
            'Die Landschaft wird gemalt

            Grafikengine.ptfPosition = Startpunkt
            Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
            Grafikengine.szfScale = New Size(-127, 192)
            If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Schiff.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Transport.ToString.ToUpper Then
                Grafikengine.Sprite.Draw2D(KampfGrafiken.getSky(0, Einheit.GetTerrain(Objektverwalter.Spielfeld.MomentaneSchlacht)), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.Sprite.Draw2D(KampfGrafiken.getAltBack(0, Einheit.GetTerrain(Objektverwalter.Spielfeld.MomentaneSchlacht)), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.Sprite.Draw2D(KampfGrafiken.getFore(0, Einheit.GetTerrain(Objektverwalter.Spielfeld.MomentaneSchlacht), True), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
            Else
                'Jetzt malen wir die Sache bewegt.
                BewegungsX2 += 3
                If BewegungsX2 > 127 Then BewegungsX2 -= 127
                With Grafikengine.recBild
                    .X = BewegungsX2 : .Width = 127 - BewegungsX2
                    .Y = 0 : .Height = 192
                End With
                Grafikengine.szfScale = New Size(-Grafikengine.recBild.Width, 192)
                Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAirSky(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAltBackSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetForeSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                End If
                Grafikengine.ptfPosition.X -= (127 - BewegungsX2)
                With Grafikengine.recBild
                    .X = 0 : .Width = BewegungsX2
                    .Y = 0 : .Height = 192
                End With
                Grafikengine.szfScale = New Size(-Grafikengine.recBild.Width, 192)
                Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAirSky(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetAltBackSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                    Grafikengine.Sprite.Draw2D(KampfGrafiken.GetForeSee(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                End If
                'Zuruecksetzen fuers weitere malen.
                Grafikengine.recBild = Nothing
                Grafikengine.szfScale = Nothing
                Grafikengine.ptfRotCenter = New Point()
                Grafikengine.ptfPosition = Startpunkt
            End If
            'weiter geht's
            Dim InfoText As String() = {Sprachconverter.Translate("Produziere Einheit"), " ", " ", " ", " ", " ", " ", " ", " "}
            '            'Das Gebaeude wird gemalt
            Dim G As ObjektGebaeude = Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Gebaeude

            Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X - 127 - 127 - 4
            'Die Einheit wird gemalt
            DrawUnit(Grafikengine.ptfPosition, True, Einheit.GetKampfanimation, Einheit)

            'wir malen die Deckung
            Dim Max As Integer = Einheit.GetSpieler.GetDeffensivSterne(Nothing, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
            Dim StartX As Integer = 5
            Grafikengine.ptfPosition.Y = Startpunkt.Y
            Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
            Grafikengine.ptfPosition.X += (StartX - 127)
            Grafikengine.recBild = Nothing
            Grafikengine.szfScale = Nothing
            For I = 0 To Max - 1
                Grafikengine.Sprite.Draw2D(ObjektKOInformation.BildTexturen(5), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)
                Grafikengine.ptfPosition.X += 8
                If I = 4 Then
                    Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X
                    Grafikengine.ptfPosition.X += +StartX + 4
                    Grafikengine.ptfPosition.Y += 10
                End If
            Next
            'Gebaeude oder Landschaft auslesen.
            If IsNothing(G) = False Then
                InfoText(1) = Sprachconverter.Translate(G.Gebaeudename)
                If G.Besetzung > 0 Then
                    InfoText(2) = Sprachconverter.Translate("Besetzungszahl") + ": " + G.Besetzung.ToString
                End If
                'If G.KP > 0 Then
                '    Array.Resize(T, T.Length + 1)
                '    T(T.Length - 1) = G.KP
                'End If
            Else
                InfoText(1) = Sprachconverter.Translate(Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Landschaftsname)


                'If Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Leben > 0 Then
                '    Array.Resize(T, T.Length + 1)
                '    T(T.Length - 1) = Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht).Leben
                'End If

            End If
            'die Einheiten malen
            Grafikengine.ptfPosition.Y = Startpunkt.Y
            Grafikengine.ptfPosition.X = DataSettings.BildschirmBreite - Startpunkt.X - 127
            '0=Normal 1=Exakt 2=Unbekannt
            Dim LebensbalkenMalen As Integer = 0
            If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).KOS(0).Verstecker = True And Einheit.GetSpieler.KOS(0).KOBoostApply(X, Y) And Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team <> Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team Then
                LebensbalkenMalen = 2
            ElseIf Objektverwalter.Spielfeld.AktuellerSpieler.KOS(0).GenauesLebenAnzeigen = True Then
                LebensbalkenMalen = 1
            Else
                LebensbalkenMalen = 0
            End If
            If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team <> Objektverwalter.Spielfeld.AktuellerSpieler.Team Then
                If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.FeindlicheTPVersteckt = True Then
                    'Aufgrund von Gaben oder so koennen wir keine TP von Feinden sehen
                    LebensbalkenMalen = 2
                End If
            Else
                If Objektverwalter.Spielfeld.AktuellerSpieler.VeraenderteWerte.EigeneTPVersteckt = True Then
                    'Aufgrund von Gaben oder so koennen wir keine TP von eigenen Truppen sehen
                    LebensbalkenMalen = 2
                End If
            End If

            Dim ATKLeben As Single = Einheit.Leben
            If LebensbalkenMalen < 2 Then
                'Wir malen den Lebensbalken
                Dim ProzLeben As Single = (Einheit.Leben) / (100)
                ATKLeben *= ProzLeben
                Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzLeben), Startpunkt.Y - 20, (127 * ProzLeben), 20, KampfAnimation.CalculateLiveBarColor(ATKLeben)) 'draws the appropriate percent of the life bar
            End If
            'wir malen den Treibstoff
            Dim ProzTreib As Single = 0
            If Einheit.Treibstoff >= 0 Then
                ProzTreib = (Einheit.Treibstoff) / (Einheit.SpritMax)
            Else
                ProzTreib = 1
            End If
            Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzTreib), Startpunkt.Y - 40, (127 * ProzTreib), 20, CalculateTreibBarColor(ProzTreib * 100)) 'draws the appropriate percent of the life bar
            'Wir malen die Munition
            If Not Einheit.Waffe2 = "Keine" Or Einheit.HasMaterial Then
                Dim ProzMuni As Single = (Einheit.Munition) / (Einheit.MunitionMax)
                Grafikengine.fillRect(DataSettings.BildschirmBreite - Startpunkt.X - (127 * ProzMuni), Startpunkt.Y - 60, (127 * ProzMuni), 20, Color.Brown) 'draws the appropriate percent of the life bar
            End If


            Dim Text As String = Sprachconverter.Translate("Leben") + " "
            Select Case LebensbalkenMalen
                Case 1 'Wir malen exakt
                    Text += CInt(Einheit.Leben).ToString + "/100"
                Case 2 'Wir malen ein "-/-"
                    Text += "-/-"
                Case Else 'wir malen die KP
                    Text += Einheit.getKP.ToString + "/10"
            End Select
            Dim Breite As Integer = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
            ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 19), 1)
            'Jetzt Treibstoff
            Text = Sprachconverter.Translate("Treibstoff") + " "
            If Einheit.Treibstoff < 0 Then
                Text += "-/-"
            Else
                Text += (Einheit.Treibstoff).ToString + "/" + Einheit.SpritMax.ToString
            End If
            Breite = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
            ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 39), 1)
            'Munition
            Text = Sprachconverter.Translate("Munition") + " "
            If Einheit.MunitionMax < 0 Then
                Text = ""
            Else
                Text += Einheit.Munition.ToString + "/" + Einheit.MunitionMax.ToString
            End If
            Breite = Text.Length * ObjektAlphabet.BuchstabenBreiteKlein
            ObjektAlphabet.DrawString(Text, 1, New Point(DataSettings.BildschirmBreite - Startpunkt.X - 127 - 8 - Breite, Startpunkt.Y - 59), 1)


            InfoText(3) = Sprachconverter.Translate(Einheit.Einheitenname)
            If Einheit.Waffe1 <> "Keine" Then
                InfoText(4) = Sprachconverter.Translate("Waffe") + " 1: " + Sprachconverter.Translate(Einheit.Waffe1)
            End If
            If Einheit.Waffe2 <> "Keine" Then
                InfoText(5) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate(Einheit.Waffe2)
            ElseIf Einheit.HasMaterial Then
                InfoText(4) = Sprachconverter.Translate("Waffe") + " 2: " + Sprachconverter.Translate("Material")
            End If
            InfoText(6) = Sprachconverter.Translate("Bewegungsart") + ": " + Sprachconverter.Translate(Einheit.Bewegungsart)
            Dim BewPunkte As Integer = Einheit.GetMovementRange
            InfoText(7) = Sprachconverter.Translate("Bewegungspunkte") + ": " + BewPunkte.ToString
            InfoText(8) = Sprachconverter.Translate("Sicht") + ": " + Einheit.GetSicht().ToString
            If Objektverwalter.Spielfeld.Regeln.LevelModus = True Then
                Array.Resize(InfoText, 10)
                InfoText(9) = Sprachconverter.Translate("Rang") + ": " + Sprachconverter.Translate(Einheit.EinheitenStufe.ToString)
            End If
            'Jetzt noch die Fracht anzeigen
            If Einheit.Ladung.Length > 0 Then
                If Objektverwalter.Spielfeld.Regeln.Nebel > 0 Then
                    If IsNothing(Einheit.Ladung(0)) = False Then
                        AddLadung(InfoText, False, Einheit)
                    ElseIf Not Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                        AddLadung(InfoText, True, Einheit)
                    End If
                ElseIf Hauptmenue.Formmodus = Hauptmenue.Formmodi.Spiel Then
                    If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).KOS(0).Verstecker = True And Einheit.GetSpieler.KOS(0).KOBoostApply(X, Y) Then
                        If Not Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team = Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team Then
                            AddLadung(InfoText, True, Einheit)
                        ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                            AddLadung(InfoText, False, Einheit)
                        End If
                    ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                        AddLadung(InfoText, False, Einheit)
                    End If
                ElseIf IsNothing(Einheit.Ladung(0)) = False Then
                    AddLadung(InfoText, False, Einheit)
                End If
            End If

            'Infos malen
            ObjektInfoAnzeige.Text.neuerText(InfoText, DataSettings.BildschirmBreite - Startpunkt.X - 127 - 127 - 15, Startpunkt.Y + 10, Nothing)
            ObjektInfoAnzeige.Text.Malen(New Point)

            'wir malen den Vordergrund
            Grafikengine.recBild = Nothing
            Grafikengine.ptfPosition = New Point(DataSettings.BildschirmBreite, Rechteck.Y)
            Grafikengine.szfScale = New Size(-Rechteck.Width, Rechteck.Height)
            Grafikengine.Sprite.Draw2D(VorderGrund(0), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intColor)

        End If

    End Sub

    Private Sub AddLadung(ByRef InfoText() As String, ByVal Versteckt As Boolean, ByVal Einheit As ObjektEinheit)
        For Each E In Einheit.Ladung

            If Versteckt = True Then
                Array.Resize(InfoText, InfoText.Length + 1)
                InfoText(InfoText.Length - 1) = Sprachconverter.Translate("Fracht") + ": ?"
            ElseIf Not E Is Nothing Then
                Array.Resize(InfoText, InfoText.Length + 1)
                InfoText(InfoText.Length - 1) = Sprachconverter.Translate("Fracht") + ": " + Sprachconverter.Translate(E.Einheitenname)
            End If
        Next
    End Sub
    Public Sub DrawUnit(ByVal MalStart As Point, ByVal Flip As Boolean, ByVal EinheitAnimation As Objektverwalter.Kampfanimation, ByVal Einheit As ObjektEinheit)
        Dim sngrotation As Single = 0
        Dim intcolor As Color = Color.FromArgb(255, 255, 255, 255)
        Grafikengine.szfScale = Nothing
        If EinheitAnimation.Truppenzahl = 5 Then
            Dim R As Integer = 0
            Dim UeberlebendeEinheiten As Integer = Math.DivRem(CInt(Einheit.Leben), 20, R)
            If R > 0 Then UeberlebendeEinheiten += 1
            If Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).KOS(0).Verstecker = True And Einheit.GetSpieler.KOS(0).KOBoostApply(Einheit.X, Einheit.Y) And Objektverwalter.Spielfeld.Spieler(Objektverwalter.Spielfeld.Regeln.LetzterMensch).Team <> Objektverwalter.Spielfeld.Spieler(Einheit.Spieler).Team Then
                UeberlebendeEinheiten = 5
            End If
            While UeberlebendeEinheiten > 0
                If Flip = False Then
                    Dim Position As Point = New Point(XStart + ((UeberlebendeEinheiten * 70) Mod 100), YStart - UeberlebendeEinheiten * 17) + EinheitAnimation.EinzelUnitPosition
                    If Einheit.IsFlyingUnit Then Position.Y += Zufallszahl(0, 0)
                    If Flip = True Then Position = EinheitenAnimation.FlipX(Position.X, Position.Y, EinheitAnimation.EinheitenID)
                    Dim Ausschnitt As Point = EinheitenAnimation.SetBildAusschnitt(0, EinheitAnimation.MovementFrames + EinheitAnimation.Stoppingframes, Flip, Position, EinheitAnimation.Bildgroesse.Width, EinheitAnimation.Bildgroesse.Height)
                    Grafikengine.ptfPosition = MalStart + Position + Ausschnitt
                    If Grafikengine.recBild.Width > 0 And Grafikengine.recBild.Height > 0 Then
                        Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTexture(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTextureMask(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, Einheit.GetSpielerFarbe)
                    End If
                Else
                    'Die Einheit am Anfang
                    Dim Position As Point = New Point(XStart + ((UeberlebendeEinheiten * 70) Mod 100), YStart - UeberlebendeEinheiten * 17) + EinheitAnimation.EinzelUnitPosition
                    If Einheit.IsFlyingUnit Then Position.Y += Zufallszahl(0, 0)
                    If Flip = True Then Position = EinheitenAnimation.FlipX(Position.X, Position.Y, EinheitAnimation.EinheitenID)
                    Dim Ausschnitt As Point = EinheitenAnimation.SetBildAusschnitt(0, EinheitAnimation.MovementFrames + EinheitAnimation.Stoppingframes, Flip, Position, EinheitAnimation.Bildgroesse.Width, EinheitAnimation.Bildgroesse.Height)
                    Grafikengine.ptfPosition = MalStart + Position + Ausschnitt
                    'Momentan gehen Tode Einheiten einfach weg hier sollten sie transparenter werden bis unsichtbar Frames 220-230
                    If Grafikengine.recBild.Width > 0 And Grafikengine.recBild.Height > 0 Then
                        Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTexture(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                        Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTextureMask(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, Einheit.GetSpielerFarbe)
                    End If
                End If
                UeberlebendeEinheiten -= 1
            End While
        Else
            If Flip = False Then
                Dim Position As Point = EinheitAnimation.EinzelUnitPosition
                If Einheit.IsFlyingUnit Then Position.Y += Zufallszahl(0, 0)
                If Flip = True Then Position = EinheitenAnimation.FlipX(Position.X, Position.Y, EinheitAnimation.EinheitenID)
                Dim Ausschnitt As Point = EinheitenAnimation.SetBildAusschnitt(0, EinheitAnimation.MovementFrames + EinheitAnimation.Stoppingframes, Flip, Position, EinheitAnimation.Bildgroesse.Width, EinheitAnimation.Bildgroesse.Height)
                Grafikengine.ptfPosition = MalStart + Position + Ausschnitt
                If Grafikengine.recBild.Width > 0 And Grafikengine.recBild.Height > 0 Then
                    Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTexture(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                    Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTextureMask(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, Einheit.GetSpielerFarbe)
                End If
            Else
                'Die Einheit am Anfang
                Dim Position As Point = EinheitAnimation.EinzelUnitPosition
                If Einheit.IsFlyingUnit Then Position.Y += Zufallszahl(0, 0)
                If Flip = True Then Position = EinheitenAnimation.FlipX(Position.X, Position.Y, EinheitAnimation.EinheitenID)
                Dim Ausschnitt As Point = EinheitenAnimation.SetBildAusschnitt(0, EinheitAnimation.MovementFrames + EinheitAnimation.Stoppingframes, Flip, Position, EinheitAnimation.Bildgroesse.Width, EinheitAnimation.Bildgroesse.Height)
                Grafikengine.ptfPosition = MalStart + Position + Ausschnitt
                'Momentan gehen Tode Einheiten einfach weg hier sollten sie transparenter werden bis unsichtbar Frames 220-230
                If Grafikengine.recBild.Width > 0 And Grafikengine.recBild.Height > 0 Then
                    Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTexture(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, intcolor)
                    Grafikengine.Sprite.Draw2D(EinheitAnimation.GetTextureMask(Objektverwalter.Kampfanimation.Textur.Animations.Walk), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngrotation, Grafikengine.ptfPosition, Einheit.GetSpielerFarbe)
                End If
            End If
        End If
    End Sub
    Public Function CalculateTreibBarColor(ByVal ProzLeben As Single) As Color
        Select Case ProzLeben
            Case Is > 80
                Return Color.Navy
            Case Is > 60
                Return Color.Blue
            Case Is > 40
                Return Color.RoyalBlue
            Case Is > 20
                Return Color.DodgerBlue
            Case Else
                Return Color.LightSkyBlue
        End Select
    End Function
    Public Sub LoadUnitTexture(Optional ByVal E As ObjektEinheit = Nothing)
        If Objektverwalter.Spielfeld.OnMap(X, Y) Then
            If E Is Nothing Then
                Einheit = Objektverwalter.Spielfeld.Einheiten(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht)
                If Einheit Is Nothing Then
                    Einheit = New EinheitAmphibienpanzer(Objektverwalter.Spielfeld.AktuellerSpieler.Spieler, X, Y, True)
                Else
                    EinheitAnimation = Objektverwalter.AlleEinheiten(Einheit.BildID).GetKampfAnimation(Einheit.GetSpieler.Armee)

                End If
            Else
                Einheit = E
            End If
            If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Transport.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Schiff.ToString.ToUpper Then
                forea = KampfGrafiken.getFore(0, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
            Else
                forea = KampfGrafiken.GetForeSee(0)
            End If
            If Not Einheit.Bewegungsart.ToUpper = MovementSorts.Transport.ToString.ToUpper And Not Einheit.Bewegungsart.ToUpper = MovementSorts.Schiff.ToString.ToUpper Then
                backa = KampfGrafiken.getAltBack(0, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
            Else
                backa = KampfGrafiken.GetAltBackSee(0)
            End If
            If Einheit.Bewegungsart.ToUpper = MovementSorts.Flugzeug.ToString.ToUpper Then
                Lufta = KampfGrafiken.GetAirSky(0)
            Else
                Lufta = KampfGrafiken.getSky(0, Objektverwalter.Spielfeld.Landschaften(X, Y, Objektverwalter.Spielfeld.MomentaneSchlacht))
            End If

        End If
    End Sub
End Class

